// class Solution {
// public:
//     vector<vector<int>> subsets(vector<int>& nums) {
//        vector<vector<int>> ans;
//        int n=nums.size();
//        for(int i=0;i<(1<<n);i++){
//          vector<int>res;
//          for(int j=0;j<n;j++){
//             if(i&(1<<j)) res.push_back(nums[j]);
//          }
//          ans.push_back(res);
//        }
//        return ans;
//     }
// };
class Solution {
public:
    vector<vector<int>> ans;
    int n;
    void dfs(vector<int>& res, int idx, vector<int>& nums) {
        if (idx == n) {
            ans.push_back(res);
            return;
        }
        res.push_back(nums[idx]);
        dfs(res, idx + 1, nums);
        res.pop_back();
        dfs(res, idx + 1, nums);
    }
    vector<vector<int>> subsets(vector<int>& nums) {
        n = nums.size();
        vector<int>res;
        dfs(res, 0, nums);
        return ans;
    }
};

